﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxUploadControl;
using Aspose.Cells;
using AjaxControlToolkit;
using RC.ControlAcceso.ObjetosNegocio;
using System.IO;
//using System.Data.Common;
using System.Data;
using System.Data.OleDb;

public partial class ReporteDDJJ : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
            CargarValoresIniciales();
    }
    private void CargarValoresIniciales()
    {
        txtAno.Text = DateTime.Now.Year.ToString();
        ddlMes.SelectedIndex = DateTime.Now.Month -1;
    }
    protected void cvVariasValidaciones_ServerValidate(object source, ServerValidateEventArgs args)
    {
        CustomValidator _cv = source as CustomValidator;

        args.IsValid = true;
    }
    protected void btnProcesar_Click(object sender, EventArgs e)
    {
        string _mes = ddlMes.SelectedValue.ToString();
        if (_mes.Length == 1)
            _mes = "0" + _mes;
        string _nombreArchivo = txtAno.Text + "-" + _mes + "-" + ddlSector.SelectedItem.Value + "(C).xls";
        _nombreArchivo = _nombreArchivo.Replace(" ", string.Empty);
        upldArchivo.SaveAs(Server.MapPath("Reportes/DDJJ/") + _nombreArchivo);


        if (ProcesarArchivo(_nombreArchivo) == false)
            return;

        gvArchivos.DataBind();
    }
    protected void MostrarMensaje(string pMensaje, bool pEnVerde)
    {
        if (pEnVerde == true)
            lblMensaje.ForeColor = System.Drawing.Color.Green;
        else
            lblMensaje.ForeColor = System.Drawing.Color.Red;

        lblMensaje.Text = pMensaje;
        
    }
    protected void dsArchivos_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        string _ruta = System.Web.HttpContext.Current.Server.MapPath("~"); //obtiene la ruta a la raiz de la aplicación
        //path += "\\Reportes\\DDJJ";
        //string _ruta = Directory.GetParent(HttpContext.Current.Request.PhysicalPath).Parent.FullName; //DEBE TENER EL "\" AL FINAL
        e.InputParameters["pRutaDDJJ"] = _ruta ;
    }
    #region Procesar Archivos
    private bool ProcesarArchivo(string pNombre_Archivo)
    {
        try
        {
            DataSet _DS_Ingresos = null;
            int _fila_inicio_datos_DDJJ = 3;
            // obtengo el DS del archivo a cargar
            try
            {
                _DS_Ingresos = Obtener_DS(pNombre_Archivo, "Sheet1");
                El_archivo_es_valido(_DS_Ingresos); //verificar que el formato sea correcto
            }
            catch
            {
                string _Archivo = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + pNombre_Archivo;
                System.IO.File.Delete(_Archivo); //borro el archivo
                MostrarMensaje("El archivo no es válido, verifique el archivo sea el correcto y la primer hoja tenga nombre 'Sheet1'.", false);
                return false;
            }
            //obtengo la fecha
            DateTime? _fecha = CA2Reportes.Archivo.ObtenerFecha(pNombre_Archivo);
            if (_fecha.HasValue == false)
                throw new ArgumentException("ERROR INTERNO:La fecha no es válida para cargar el archivo");

            #region Procesamiento de Excel con Aspose
            // obtengo el DS del DDJJ
            Workbook workbook = new Workbook();
            string _ruta_DDJJ = Ruta_de_DDJJ(pNombre_Archivo);
            workbook.Open(_ruta_DDJJ);

            //Obtengo la hoja
            Worksheet worksheet = workbook.Worksheets[Obtener_Sector_HojaExcel(pNombre_Archivo)];

            //Get the cells collection in the sheet
            Cells cells = worksheet.Cells;

            //si tengo elementos anteriores, los borro para reemplazarlos
            cells.DeleteRows(_fila_inicio_datos_DDJJ, 1000);

            #region asigno los valores de la planilla nueva a la DDJJ
            
            int _fila_actual_indice = _fila_inicio_datos_DDJJ; // creo la variable para iterar por cada fila
            int _primer_columna_dia = 20; //es la columna en la que empiezan los dias del mes 1 2 3 4 5 .. 31
            //por cada fila, agrego los elementos a el archivo excel
            foreach(System.Data.DataRow _fila_actual in _DS_Ingresos.Tables[0].Rows)
            {
                cells[_fila_actual_indice, 0].PutValue(_fila_actual[0]); //mes
                cells[_fila_actual_indice, 1].PutValue(_fila_actual[1]); // razon social
                cells[_fila_actual_indice, 2].PutValue(_fila_actual[2]); // empleadora
                //id omnitronic
                cells[_fila_actual_indice, 4].PutValue(_fila_actual[3]); // apellido y nombre
                cells[_fila_actual_indice, 5].PutValue(_fila_actual[4]); // CUIL
                cells[_fila_actual_indice, 6].PutValue(_fila_actual[5]); // sindicato
                cells[_fila_actual_indice, 7].PutValue(_fila_actual[6]); // categoria //////
                cells[_fila_actual_indice, 8].PutValue(_fila_actual[7]); // funcion
                // tarea
                cells[_fila_actual_indice, 10].PutValue(_fila_actual[8]); // clasifiacion
                cells[_fila_actual_indice, 11].PutValue(_fila_actual[9]); // regimen laboral
                //cells[_fila_actual_indice, 12].PutValue(_fila_actual[3]); // localidad
                //cells[_fila_actual_indice, 13].PutValue(_fila_actual[3]); // obra o servicio afectado
                //cells[_fila_actual_indice, 14].PutValue(_fila_actual[3]); // % de afectación
                //cells[_fila_actual_indice, 15].PutValue(_fila_actual[3]); // obra o servicio afectado
                //cells[_fila_actual_indice, 16].PutValue(_fila_actual[3]); // total
                //cells[_fila_actual_indice, 17].PutValue(_fila_actual[3]); // % de afectación
                cells[_fila_actual_indice, 18].PutValue(_fila_actual[_primer_columna_dia]); // 1
                cells[_fila_actual_indice, 19].PutValue(_fila_actual[_primer_columna_dia + 1]); // 2
                cells[_fila_actual_indice, 20].PutValue(_fila_actual[_primer_columna_dia + 2]); // 3
                cells[_fila_actual_indice, 21].PutValue(_fila_actual[_primer_columna_dia + 3]); // 4
                cells[_fila_actual_indice, 22].PutValue(_fila_actual[_primer_columna_dia + 4]); // 5
                cells[_fila_actual_indice, 23].PutValue(_fila_actual[_primer_columna_dia + 5]); // 6
                cells[_fila_actual_indice, 24].PutValue(_fila_actual[_primer_columna_dia + 6]); // 7
                cells[_fila_actual_indice, 25].PutValue(_fila_actual[_primer_columna_dia + 7]); // 8
                cells[_fila_actual_indice, 26].PutValue(_fila_actual[_primer_columna_dia + 8]); // 9
                cells[_fila_actual_indice, 27].PutValue(_fila_actual[_primer_columna_dia + 9]); // 10
                cells[_fila_actual_indice, 28].PutValue(_fila_actual[_primer_columna_dia + 10]); // 11
                cells[_fila_actual_indice, 29].PutValue(_fila_actual[_primer_columna_dia + 11]); // 12
                cells[_fila_actual_indice, 30].PutValue(_fila_actual[_primer_columna_dia + 12]); // 13
                cells[_fila_actual_indice, 31].PutValue(_fila_actual[_primer_columna_dia + 13]); // 14
                cells[_fila_actual_indice, 32].PutValue(_fila_actual[_primer_columna_dia + 14]); // 15
                cells[_fila_actual_indice, 33].PutValue(_fila_actual[_primer_columna_dia + 15]); // 16
                cells[_fila_actual_indice, 34].PutValue(_fila_actual[_primer_columna_dia + 16]); // 17
                cells[_fila_actual_indice, 35].PutValue(_fila_actual[_primer_columna_dia + 17]); // 18
                cells[_fila_actual_indice, 36].PutValue(_fila_actual[_primer_columna_dia + 18]); // 19
                cells[_fila_actual_indice, 37].PutValue(_fila_actual[_primer_columna_dia + 19]); // 20
                cells[_fila_actual_indice, 38].PutValue(_fila_actual[_primer_columna_dia + 20]); // 21
                cells[_fila_actual_indice, 39].PutValue(_fila_actual[_primer_columna_dia + 21]); // 22
                cells[_fila_actual_indice, 40].PutValue(_fila_actual[_primer_columna_dia + 22]); // 23
                cells[_fila_actual_indice, 41].PutValue(_fila_actual[_primer_columna_dia + 23]); // 24
                cells[_fila_actual_indice, 42].PutValue(_fila_actual[_primer_columna_dia + 24]); // 25
                cells[_fila_actual_indice, 43].PutValue(_fila_actual[_primer_columna_dia + 25]); // 26
                cells[_fila_actual_indice, 44].PutValue(_fila_actual[_primer_columna_dia + 26]); // 27
                cells[_fila_actual_indice, 45].PutValue(_fila_actual[_primer_columna_dia + 27]); // 28
                if(_fila_actual.ItemArray.Length > 48)
                    cells[_fila_actual_indice, 46].PutValue(_fila_actual[_primer_columna_dia + 28]); // 29
                if (_fila_actual.ItemArray.Length > 49)
                    cells[_fila_actual_indice, 47].PutValue(_fila_actual[_primer_columna_dia + 29]); // 30
                if (_fila_actual.ItemArray.Length > 50)
                    cells[_fila_actual_indice, 48].PutValue(_fila_actual[_primer_columna_dia + 30]); // 31

                _fila_actual_indice++;
            }
            #endregion

            //guardo el archivo excel.
            workbook.Save(_ruta_DDJJ);
            //workbook.Save("Comprobantes.xls", FileFormatType.Default, SaveType.OpenInExcel, System.Web.HttpContext.Current.Response);

            cells = null;
            worksheet = null;
            workbook = null;

            #endregion
            
            //IMPORTANTE
            //si  el archivo es el ultimo de los 3, tengo que cambiar el nombre del DDJJ a (C); borrar el anterior y procesar el DDJJ contra las marcas en el sistema
            Pasar_DDJJ_a_completa_si_corresponde(_ruta_DDJJ);

            return true;
        }
        catch(ArgumentException e)
        {
            //mostrar errores
            MostrarMensaje(e.Message, false);
            throw new ArgumentException("Borrar el archivo si corresponde");
        }

    }
    private void Pasar_DDJJ_a_completa_si_corresponde(string pRuta_DDJJ)
    {
        //el parametro es la ruta completa fisica del archivo
        if (pRuta_DDJJ.Contains("(P)")) //significa que esta como parcial
        {
            string pRuta_DDJJ_completo = pRuta_DDJJ.Replace("(P)","(C)"); //pongo el nombre como completo 

            // verifico si estan los 3 archivos en el directorio, si estan, tengo que renombrar el archivo DDJJ a (C)
            string _archivo_Jerarquico = pRuta_DDJJ_completo.Replace("DDJJ(C)", "Jerarquico(C)");
            string _archivo_Chubut = pRuta_DDJJ_completo.Replace("DDJJ(C)", "Chubut(C)");
            string _archivo_SantaCruz = pRuta_DDJJ_completo.Replace("DDJJ(C)", "SantaCruz(C)");
            if ((System.IO.File.Exists(_archivo_Jerarquico) == true)
                && (System.IO.File.Exists(_archivo_Chubut) == true)
                && (System.IO.File.Exists(_archivo_SantaCruz) == true))
            {//existen los 3, tengo que cambiar el nombre al archivo DDJJ
                System.IO.File.Move(pRuta_DDJJ, pRuta_DDJJ_completo);
            }
        }
        else
        {
            //esta con (C) o completo , no tengo que modificarlo
        }
    }
    /// <summary>
    /// Devuelve el nombre del sector del archivo(y el sistema) en el nombre de la Hoja del excel de DDJJ
    /// </summary>
    /// <param name="pNombreArchivo"></param>
    /// <returns></returns>
    private static string Obtener_Sector_HojaExcel(string pNombreArchivo)
    {
        string _hoja_DDJJ = CA2Reportes.Archivo.ObtenerSector(pNombreArchivo);
        if (_hoja_DDJJ.ToLower() == "jerarquico")
            _hoja_DDJJ = "DDJJ JERARQUICO";
        else if (_hoja_DDJJ.ToLower() == "chubut")
            _hoja_DDJJ = "DDJJ PETROLEROS CHUBUT";
        else if (_hoja_DDJJ.ToLower() == "santacruz")
            _hoja_DDJJ = "DDJJ PETROLEROS SANTA CRUZ";
        else
            throw new ArgumentException("ERROR: sector no válido");

        return _hoja_DDJJ;
    }
    /// <summary>
    /// Devuelve la ruta al archivo DDJJ.
    /// Si el archivo no existe, lo crea, el nombre puede ser 2013-01-DDJJ(P) o 2013-01-DDJJ(C)
    /// El proceso utiliza el nombre del archivo (que es uno de los sectores) y lo reemplaza por el correspondiente DDJJ con (P) o (C) según corresponda.
    /// </summary>
    /// <param name="pNombreArchivo"></param>
    /// <returns>Es el nombre del archivo que es uno de los sectores.</returns>
    private static string Ruta_de_DDJJ(string pNombreArchivo)
    {
        //verifico si el archivo existe como "(C)" (completo)
        string _ruta_de_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(C)"); //arreglo el nombre del archivo
        _ruta_de_DDJJ = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + _ruta_de_DDJJ; //obtengo la ruta completa
        if (System.IO.File.Exists(_ruta_de_DDJJ) == true)
            return _ruta_de_DDJJ;

        //verifico si el archivo existe como "(P)" (parcial)
        _ruta_de_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(P)"); //arreglo el nombre del archivo
        _ruta_de_DDJJ = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + _ruta_de_DDJJ; //obtengo la ruta completa
        if (System.IO.File.Exists(_ruta_de_DDJJ) == true)
            return _ruta_de_DDJJ;

        //el archivo no existe, entonces tengo que crear una copia de la plantilla y nombrarla con el formato correcto.
        string _plantilla_DDJJ = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\PlantillaDDJJ.xls";
        _ruta_de_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(P)");
        string _ruta_DDJJ_nueva = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + _ruta_de_DDJJ;
        File.Copy(_plantilla_DDJJ, _ruta_DDJJ_nueva);
        return _ruta_DDJJ_nueva;
    }
    private Object[] Obtener_FilaDDJJ_De_FilaIngresos(DataRow pfila)
    {
        //DataRow _resultado = new DataRow();
        object[] array = new object[48];
	    array[0] = pfila[0];                    // Mes
	    array[1] = pfila[1];                    //razon social
	    array[2] = pfila[2];                    //empleadora
	    array[3] = string.Empty;                     // id omnitronic
        array[4] = pfila[3];                    // apellido, nombre
        array[5] = pfila[4];                    // CUIT sin guion
        array[6] = pfila[5];                    // sindicato
        array[7] = pfila[6];                    // categoria
        array[8] = pfila[7];                    // funcion
        array[9] = string.Empty;                // tarea
        array[10] = pfila[8];                   // clasificacion 
        array[11] = pfila[9];                   // regimen laboral
        array[12] = string.Empty;               // localidad de trabajo
        array[13] = string.Empty;               // obra o servicio afectado
        array[14] = string.Empty;               // % de afectación
        array[15] = string.Empty;               // obra o servicio afectado
        array[16] = string.Empty;               // total
        array[17] = string.Empty;                        // % de afectacion
        array[18] = 0;                  // dia 1
        array[19] = 0;                  // dia 2
        array[20] = 0;                  // dia 3
        array[21] = 0;                  // dia 4 
        array[22] = 0;                  // dia 5
        array[23] = 0;                  // dia 6
        array[24] = 0;                  // dia 7
        array[25] = 0;                  // dia 8
        array[26] = pfila[28];                  // dia 9
        array[27] = pfila[29];                  // dia 10
        array[28] = pfila[30];                  // dia 11
        array[29] = pfila[31];                  // dia 12
        array[30] = pfila[32];                  // dia 13
        array[31] = pfila[33];                  // dia 14
        array[32] = pfila[34];                  // dia 15
        array[33] = pfila[35];                  // dia 16
        array[34] = pfila[36];                  // dia 17
        array[35] = pfila[37];                  // dia 18
        array[36] = pfila[38];                  // dia 19
        array[37] = pfila[39];                  // dia 20
        array[38] = pfila[40];                  // dia 21
        array[39] = pfila[41];                  // dia 22
        array[40] = pfila[42];                  // dia 23
        array[41] = pfila[43];                  // dia 24
        array[42] = pfila[44];                  // dia 25
        array[43] = pfila[45];                  // dia 26
        array[44] = pfila[46];                  // dia 27
        if (pfila.ItemArray.Count() > 47)
            array[45] = pfila[47];                  // dia 28
        if (pfila.ItemArray.Count() > 48)
            array[46] = pfila[48];                  // dia 29
        if (pfila.ItemArray.Count() > 49)
            array[47] = pfila[49];                  // dia 30
        if (pfila.ItemArray.Count() > 50)
            array[48] = pfila[50];                  // dia 31
        //array[18] = pfila[20];                  // dia 1
        //array[19] = pfila[21];                  // dia 2
        //array[20] = pfila[22];                  // dia 3
        //array[21] = pfila[23];                  // dia 4 
        //array[22] = pfila[24];                  // dia 5
        //array[23] = pfila[25];                  // dia 6
        //array[24] = pfila[26];                  // dia 7
        //array[25] = pfila[27];                  // dia 8
        //array[26] = pfila[28];                  // dia 9
        //array[27] = pfila[29];                  // dia 10
        //array[28] = pfila[30];                  // dia 11
        //array[29] = pfila[31];                  // dia 12
        //array[30] = pfila[32];                  // dia 13
        //array[31] = pfila[33];                  // dia 14
        //array[32] = pfila[34];                  // dia 15
        //array[33] = pfila[35];                  // dia 16
        //array[34] = pfila[36];                  // dia 17
        //array[35] = pfila[37];                  // dia 18
        //array[36] = pfila[38];                  // dia 19
        //array[37] = pfila[39];                  // dia 20
        //array[38] = pfila[40];                  // dia 21
        //array[39] = pfila[41];                  // dia 22
        //array[40] = pfila[42];                  // dia 23
        //array[41] = pfila[43];                  // dia 24
        //array[42] = pfila[44];                  // dia 25
        //array[43] = pfila[45];                  // dia 26
        //array[44] = pfila[46];                  // dia 27
        //if (pfila.ItemArray.Count() > 47)
        //    array[45] = pfila[47];                  // dia 28
        //if(pfila.ItemArray.Count() > 48)
        //    array[46] = pfila[48];                  // dia 29
        //if (pfila.ItemArray.Count() > 49)
        //    array[47] = pfila[49];                  // dia 30
        //if (pfila.ItemArray.Count() > 50)
        //    array[48] = pfila[50];                  // dia 31

        return array;
    }
    /// <summary>
    /// Devuelve el DS de DDJJ siendo el DS la hoja solicitada
    /// </summary>
    /// <param name="pHoja">Hoja a traer en el DS</param>
    /// <param name="pAno_Mes">El año y mes que corresponde el reporte</param>
    /// <returns></returns>
    private static DataSet Obtener_DS_de_DDJJ(DateTime pAno_Mes, string pNombreArchivo)
    {
        //armo el nombre del archivo a traer 
        string _nombre_archivo_DDJJ;
        //COMPROBAR QUE PASA CUANDO NO LO ENCUENTRA
        

        string _hoja_DDJJ = CA2Reportes.Archivo.ObtenerSector(pNombreArchivo);
        if (_hoja_DDJJ.ToLower() == "jerarquico")
            _hoja_DDJJ = "DDJJ JERARQUICO";
        else if (_hoja_DDJJ.ToLower() == "chubut")
            _hoja_DDJJ = "DDJJ PETROLEROS CHUBUT";
        else if (_hoja_DDJJ.ToLower() == "santacruz")
            _hoja_DDJJ = "DDJJ PETROLEROS SANTA CRUZ";
        else
            throw new ArgumentException("ERROR: sector no válido");
        

        //verifico si el archivo existe
        try
        {
            //lo busco si está completo (C)
            _nombre_archivo_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(C)");
            Obtener_DS(_nombre_archivo_DDJJ, _hoja_DDJJ);
        }
        catch
        {
            try
            {  //si no está completo, lo busco como parcial (P)
                _nombre_archivo_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(P)");
                Obtener_DS(_nombre_archivo_DDJJ, _hoja_DDJJ);
            }
            catch
            { // el archivo no existe, tengo que crear una copia de la plantilla
                string _plantilla_DDJJ = System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\PlantillaDDJJ.xls";
                _nombre_archivo_DDJJ = pNombreArchivo.Replace(CA2Reportes.Archivo.ObtenerSector(pNombreArchivo) + "(C)", "DDJJ(P)");
                string _ruta_DDJJ_nueva= System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + _nombre_archivo_DDJJ;
                File.Copy(_plantilla_DDJJ, _ruta_DDJJ_nueva);
            }
        }
        // obtengo el DS y lo devuelvo
        return Obtener_DS(_nombre_archivo_DDJJ, _hoja_DDJJ);
    }
    private static DataSet Obtener_DS(string pNombre_Archivo, string pHoja)
    {
        pNombre_Archivo = "'" + System.Web.HttpContext.Current.Server.MapPath("~") + "\\Reportes\\DDJJ\\" + pNombre_Archivo + "'";
        string excelConnectString = "Provider = Microsoft.Jet.OLEDB.4.0;" +
            "Data Source = " + pNombre_Archivo + ";" +
            "Extended Properties = 'Excel 8.0;IMEX=1;'";

        OleDbConnection objConn = new OleDbConnection(excelConnectString);
        OleDbCommand objCmd = new OleDbCommand("Select * From [" + pHoja + "$]", objConn);

        OleDbDataAdapter objDatAdap = new OleDbDataAdapter();
        objDatAdap.SelectCommand = objCmd;
        DataSet ds = new DataSet();
        objDatAdap.Fill(ds);
        return ds;
    }
    private void El_archivo_es_valido(DataSet pDS)
    {
        bool _es_valido = true;
        //verifico que no sea nulo
        if (pDS == null)
            throw new ArgumentException("Error al cargar el archivo: DataSet nulo");

        //verifico que tenga una tabla
        if (pDS.Tables.Count != 1)
            throw new ArgumentException("El archivo no contiene información válida: No se encontro la tabla");

        //verifico que la cantidad de columnas sea valida
        if(pDS.Tables[0].Columns.Count < 22)
            throw new ArgumentException("El archivo no es válido: La cantidad de columnas no es válida");

        //debe tener al menos una fila
        if(pDS.Tables[0].Rows.Count <= 0 )
            throw new ArgumentException("El archivo no es válido: No contiene información a cargar");

        //verifico que tenga los nombre de los campos correctos

        if (pDS.Tables[0].Columns[0].Caption.ToLower() != "mes")
            _es_valido = false;

        if (pDS.Tables[0].Columns[2].Caption.ToLower() != "empleadora")
            _es_valido = false;

        if (pDS.Tables[0].Columns[4].Caption.ToLower() != "cuil")
            _es_valido = false;

        if (pDS.Tables[0].Columns[5].Caption.ToLower() != "sindicato")
            _es_valido = false;

        if (pDS.Tables[0].Columns[7].Caption.ToLower() != "función")
            _es_valido = false;

        if (pDS.Tables[0].Columns[10].Caption.ToLower() != "id")
            _es_valido = false;

        if (pDS.Tables[0].Columns[12].Caption.ToLower() != "fecha de baja")
            _es_valido = false;

        if (_es_valido == false)
            throw new ArgumentException("El archivo no es válido: Las columnas no coinciden con lo esperado");
    }
    //private bool Procesar_Archivo_Jerarquico(
    #endregion
    
}



